Preprocessing articles
Converting your scopus collection into a bibliographic dataframe
Warning in convert2df(file = files[1], dbsource = "scopus", format = "csv") :
NAs introduced by coercion
Done!
Generating affiliation field tag AU_UN from C1: Done!
Converting your scopus collection into a bibliographic dataframe
Done!
Generating affiliation field tag AU_UN from C1: Done!
Networks Bibliographic
Restrict the network
Merge with main data
Aggregated Network
Network Cocitation
Warning in gzfile(file, "rb") :
cannot open compressed file '../temp/temp/mat_cit_liser_ud.rds', probable reason 'No such file or directory'
Error in gzfile(file, "rb") : cannot open the connection
A ggregated Network
2 mode network
Joining, by = "XX"
Warning: The `x` argument of `as_tibble.matrix()` must have unique column names if `.name_repair` is omitted as of tibble 2.0.0.
Using compatibility `.name_repair`.
This warning is displayed once every 8 hours.
Call `lifecycle::last_lifecycle_warnings()` to see where this warning was generated.
Topicmodel
Loading required package: koRpus.lang.en
Loading required package: koRpus
Loading required package: sylly
For information on available language packages for 'koRpus', run
available.koRpus.lang()
and see ?install.koRpus.lang()
Attaching package: ‘koRpus’
The following object is masked from ‘package:tm’:
readTagged
The following object is masked from ‘package:readr’:
tokenize
Warning: Expected 3 pieces. Missing pieces filled with `NA` in 2059779 rows [1, 2, 4, 5, 7, 8, 10, 11, 13, 14, 16, 17, 19, 20, 22, 23, 25, 26, 28, 29, ...].
fit models...
During startup - Warning messages:
1: Setting LC_COLLATE failed, using "C"
2: Setting LC_TIME failed, using "C"
3: Setting LC_MESSAGES failed, using "C"
4: Setting LC_MONETARY failed, using "C"
During startup - Warning messages:
1: Setting LC_COLLATE failed, using "C"
2: Setting LC_TIME failed, using "C"
3: Setting LC_MESSAGES failed, using "C"
4: Setting LC_MONETARY failed, using "C"
During startup - Warning messages:
1: Setting LC_COLLATE failed, using "C"
2: Setting LC_TIME failed, using "C"
3: Setting LC_MESSAGES failed, using "C"
4: Setting LC_MONETARY failed, using "C"
During startup - Warning messages:
1: Setting LC_COLLATE failed, using "C"
2: Setting LC_TIME failed, using "C"
3: Setting LC_MESSAGES failed, using "C"
4: Setting LC_MONETARY failed, using "C"
done.
calculate metrics:
Griffiths2004... done.
CaoJuan2009... done.
Arun2010... done.
Deveaud2014... done.
Warning: `guides(<scale> = FALSE)` is deprecated. Please use `guides(<scale> = "none")` instead.


Warning in if (class(X) == "dist") { :
the condition has length > 1 and only the first element will be used
sigma summary: Min. : 33554432 |1st Qu. : 33554432 |Median : 33554432 |Mean : 33554432 |3rd Qu. : 33554432 |Max. : 33554432 |
Epoch: Iteration #100 error is: 18.2768141242953
Epoch: Iteration #200 error is: 0.411823265102699
Epoch: Iteration #300 error is: 0.304590069644955
Epoch: Iteration #400 error is: 0.276234760744753
Epoch: Iteration #500 error is: 0.268934345793253
Epoch: Iteration #600 error is: 0.268422920995153
Epoch: Iteration #700 error is: 0.268375755597861
Epoch: Iteration #800 error is: 0.268374031987987
Epoch: Iteration #900 error is: 0.268373919645058
Epoch: Iteration #1000 error is: 0.268373821697181
Loading required namespace: servr
To stop the server, run servr::daemon_stop(1) or restart your R session
Serving the directory /private/var/folders/34/_4xm8_d96wl8vhw6nq91nrhw0000gn/T/RtmpFkHnAZ/file16e3a747ce168 at http://127.0.0.1:4321
To stop the server, run servr::daemon_stop(2) or restart your R session
Serving the directory /Users/dsh/OneDrive - Aalborg Universitet/01 - Research/project_2022_biblio_lux_eval/biblio_lux_2022_github/output/LDAviz_liser_ud.rds at http://127.0.0.1:4230
Local citations
Warning in rm(CR, CRL) : object 'CRL' not found
Historical citation
SCOPUS DB: Searching local citations (LCS) by document titles (TI) and DOIs...
Legend
$net
IGRAPH d370a89 DN-- 37 61 --
+ attr: name (v/c), title (v/c), id (v/c), size (v/n), years (v/n), color (e/c)
+ edges from d370a89 (vertex names):
[1] ZARABI Z, 2019, SUSTAINABILITY ->GERBER P, 2020, TRANSP RES PART F TRAFFIC PSYCHOL BEHAV
[2] ZARABI Z, 2019, SUSTAINABILITY ->MA T-Y, 2021, TRANSP RES PART D TRANSP ENVIRON-a
[3] ZARABI Z, 2019, SUSTAINABILITY ->KAMRUZZAMAN M, 2021, J TRANSP GEOGR
[4] GERBER P, 2020, TRANSP RES PART F TRAFFIC PSYCHOL BEHAV->MA T-Y, 2021, TRANSP RES PART D TRANSP ENVIRON-a
[5] DE VOS J, 2019, TRANSP RES PART F TRAFFIC PSYCHOL BEHAV->ZARABI Z, 2019, SUSTAINABILITY
[6] DE VOS J, 2019, TRANSP RES PART F TRAFFIC PSYCHOL BEHAV->GERBER P, 2020, TRANSP RES PART F TRAFFIC PSYCHOL BEHAV
[7] DE VOS J, 2019, TRANSP RES PART F TRAFFIC PSYCHOL BEHAV->VAN WEE B, 2019, J TRANSP GEOGR
[8] DE VOS J, 2019, TRANSP RES PART F TRAFFIC PSYCHOL BEHAV->YE R, 2020, TRANSP RES PART A POLICY PRACT
+ ... omitted several edges
$g
$layout
$axis
NA


Other stuff
Threefield Plot
rm(M_threefield)
#M %>% authorProdOverTime(k = 10, graph = TRUE) #M %>% rpys(sep
= “;”, graph = T) #M %>% thematicMap() #M_them_evo <- M %>%
thematicEvolution(years = c(2016, 2018,2021))
Conceptual Structure
#CS <- M %>% conceptualStructure(field=“ID”, method=“CA”,
minDegree=4, clust=5, stemming=FALSE, labelsize=10, documents=10) #CS
%>% saveRDS(“../temp/CS.RDS”) #rm(CS)
mat_bib %<>% normalizeSimilarity(type = “association”) # NOTE:
We do not normalize on the biblio-network publication level
anymore.
LS0tCnRpdGxlOiAiTHV4ZW1ib3VyZyBSZXNlYXJjaCBFdmFsdWF0aW9uIDIwMjIiCmF1dGhvcjogIkRhbmllbCBTLiBIYWluIgpkYXRlOiAiYHIgZm9ybWF0KFN5cy50aW1lKCksICclZCAlQiwgJVknKWAiCm91dHB1dDoKICBodG1sX25vdGVib29rOgogICAgZGZfcHJpbnQ6IHBhZ2VkCiAgICB0b2M6IG5vCiAgICBjb2RlX2ZvbGRpbmc6IGhpZGUKLS0tCgotLS0KdGl0bGU6ICJMdXhlbWJvdXJnIFJlc2VhcmNoIEV2YWx1YXRpb24gMjAyMiIKYXV0aG9yOiAiRGFuaWVsIFMuIEhhaW4iCmRhdGU6ICJgciBmb3JtYXQoU3lzLnRpbWUoKSwgJyVkICVCLCAlWScpYCIKb3V0cHV0OgogIHBkZl9kb2N1bWVudDoKICAgIHRvYzogbm8KICBodG1sX25vdGVib29rOgogICAgZGZfcHJpbnQ6IHBhZ2VkCiAgICB0b2M6IG5vCiAgICBjb2RlX2ZvbGRpbmc6IGhpZGUKLS0tCgpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0KIyMjIEdlbmVyaWMgcHJlYW1ibGUKcm0obGlzdD1scygpKQpTeXMuc2V0ZW52KExBTkcgPSAiZW4iKQpvcHRpb25zKHNjaXBlbiA9IDUpCnNldC5zZWVkKDEzMzcpCgojIyMgTG9hZCBwYWNrYWdlcyAgCmxpYnJhcnkoa25pdHIpICMgRm9yIGRpc3BsYXkgb2YgdGhlIG1hcmtkb3duCmxpYnJhcnkoa2FibGVFeHRyYSkgIyBGb3IgdGFibGUgc3R5bGluZwoKbGlicmFyeSh0aWR5dmVyc2UpCmxpYnJhcnkobWFncml0dHIpCgojIyMgRXh0cmEgcGFja2FnZXMKbGlicmFyeShiaWJsaW9tZXRyaXgpCmxpYnJhcnkodGlkeWdyYXBoKQoKIyBvd24gZnVuY3Rpb25zCnNvdXJjZSgiZnVuY3Rpb25zL2Z1bmN0aW9uc19iYXNpYy5SIikKIyBzb3VyY2UoImZ1bmN0aW9ucy8wMF9wYXJhbWV0ZXJzLlIiKQpgYGAKCmBgYHtyIGdsb2JhbF9vcHRpb25zLCBpbmNsdWRlPUZBTFNFfQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IEZBTFNFLAogICAgICAgICAgICAgICAgICAgICAgd2FybmluZyA9IEZBTFNFLCAKICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBGQUxTRSkKYGBgCgpgYGB7ciwgaW5jbHVkZT1GQUxTRX0KdmFyX2luc3QgPC0gJ0xJU0VSJwp2YXJfZGVwdCA8LSAnVUQnCmBgYAoKIyBQcmVwcm9jZXNzaW5nIGFydGljbGVzCgpgYGB7cn0KZmlsZXMgPC0gbGlzdC5maWxlcyhwYXRoID0gJy4uL2RhdGEvJywgcGF0dGVybiA9IHBhc3RlMCgnc2NvcHVzXycsIHN0cl90b19sb3dlcih2YXJfaW5zdCksICdfJywgc3RyX3RvX2xvd2VyKHZhcl9kZXB0KSwgJ19zZWVkJyksIGZ1bGwubmFtZXMgPSBUUlVFKQpgYGAKCmBgYHtyfQojIExvYWQgYmlibGlvZ3JhcGhpYyBkYXRhCk0gPC0gY29udmVydDJkZihmaWxlID0gZmlsZXNbMV0sIGRic291cmNlID0gInNjb3B1cyIsIGZvcm1hdCA9ICJjc3YiKSAlPiUgbXV0YXRlKGludF9kZXB0ID0gVFJVRSkgJT4lIAogIGJpbmRfcm93cyhjb252ZXJ0MmRmKGZpbGUgPSBmaWxlc1stMV0sIGRic291cmNlID0gInNjb3B1cyIsIGZvcm1hdCA9ICJjc3YiKSAlPiUgbXV0YXRlKGludF9kZXB0ID0gRkFMU0UpKSAlPiUKICAjIERlbGV0ZSBkdXBsaWNhdGVzIChCZXR0ZXIgdXNlIEVJRCkKICBkaXN0aW5jdChVVCwgLmtlZXBfYWxsID0gVFJVRSkKCnJtKGZpbGVzKQpgYGAKCmBgYHtyfQojIEV4dHJhY3QgTWV0YSBUYWdzICNUT0RPOiBNYXliZSBtb3JlPwpNICU8PiUgbWV0YVRhZ0V4dHJhY3Rpb24oRmllbGQgPSAiQVVfQ08iLCBhZmYuZGlzYW1iID0gVFJVRSwgc2VwID0gIjsiKQpNICU8PiUgbWV0YVRhZ0V4dHJhY3Rpb24oRmllbGQgPSAiQVUxX0NPIiwgYWZmLmRpc2FtYiA9IFRSVUUsIHNlcCA9ICI7IikKTSAlPD4lIG1ldGFUYWdFeHRyYWN0aW9uKEZpZWxkID0gIkFVMV9VTiIsIGFmZi5kaXNhbWIgPSBUUlVFLCBzZXAgPSAiOyIpCk0gJTw+JSBtZXRhVGFnRXh0cmFjdGlvbihGaWVsZCA9ICJTUiIsIGFmZi5kaXNhbWIgPSBUUlVFLCBzZXAgPSAiOyIpCk0gJTw+JSBtZXRhVGFnRXh0cmFjdGlvbihGaWVsZCA9ICJDUl9BVSIsIGFmZi5kaXNhbWIgPSBUUlVFLCBzZXAgPSAiOyIpCk0gJTw+JSBtZXRhVGFnRXh0cmFjdGlvbihGaWVsZCA9ICJDUl9TTyIsIGFmZi5kaXNhbWIgPSBUUlVFLCBzZXAgPSAiOyIpCmBgYAoKCmBgYHtyfQojIGNyZWF0ZSBsYWJlbApNICU8PiUgcm93bmFtZXNfdG9fY29sdW1uKCdYWCcpICU+JSAKICBtdXRhdGUoWFggPSBwYXN0ZShzdHJfZXh0cmFjdChYWCwgcGF0dGVybiA9ICIuKlxcZHs0fSIpLCBzdHJfc3ViKFRJLCAxLDI1KSkgJT4lIHN0cl9yZXBsYWNlX2FsbCgiW15bOmFsbnVtOl1dIiwgIiAiKSAlPiUgc3RyX3NxdWlzaCgpICU+JSBzdHJfcmVwbGFjZV9hbGwoIiAiLCAiXyIpICU+JSBtYWtlLnVuaXF1ZShzZXA9J18nKSkgJT4lCiAgIyBGaWx0ZXIgb3V0CiAgbXV0YXRlKENSX24gPSBDUiAlPiUgc3RyX2NvdW50KCc7JykpICU+JQogIGZpbHRlcihDUl9uID49IDUpICU+JQogICMgQWJzdHJhY3QKICBmaWx0ZXIoQUIgIT0gJycpICU+JQogIGZpbHRlcihBQiAlPiUgc3RyX2xlbmd0aCgpID49IDI1KQoKIyBTZXR0aW5nIHJvd25hbWVzCnJvd25hbWVzKE0pIDwtIE0kWFgKYGBgCgpgYGB7cn0KIyBOdW1iZXIgb2YgY2l0ZWQgcmVmZXJlbmNlcyBhbmQgY2l0YXRpb25zCk0gJTw+JSAKICBtdXRhdGUoVENfeWVhciA9IFRDIC8gKDIwMjMgLSBQWSkpICU+JSAKICBmaWx0ZXIoVENfeWVhciA+PSAxIHwgaW50X2RlcHQgPT0gVFJVRSkgCiMgJT4lIGZpbHRlcihwZXJjZW50X3JhbmsoVENfeWVhcikgPj0gMC41KQoKYGBgCgpgYGB7cn0KIyBTYXZlIHdob2xlIGNvbXBpbGF0aW9uCk0gJT4lIHNhdmVSRFMocGFzdGUwKCcuLi90ZW1wL01fJywgc3RyX3RvX2xvd2VyKHZhcl9pbnN0KSwgJ18nLCBzdHJfdG9fbG93ZXIodmFyX2RlcHQpLCAnLnJkcycpKQojIE0gPC0gcmVhZF9yZHMocGFzdGUwKCdNXycsIHN0cl90b19sb3dlcih2YXJfaW5zdCksICdfJywgc3RyX3RvX2xvd2VyKHZhcl9kZXB0KSwgJy5yZHMnKSkKYGBgCgoKIyBOZXR3b3JrcyBCaWJsaW9ncmFwaGljCgpgYGB7cn0KbWF0X2JpYiA8LSBNICAlPiUgYmlibGlvTmV0d29yayhhbmFseXNpcyA9ICJjb3VwbGluZyIsIG5ldHdvcmsgPSAicmVmZXJlbmNlcyIsIHNlcCA9ICI7Iiwgc2hvcnRsYWJlbCA9ICBGQUxTRSkKIyBtYXRfYmliICU+JSBzYXZlUkRTKHBhc3RlMCgnLi4vdGVtcC9tYXRfYmliX18nLCBzdHJfdG9fbG93ZXIodmFyX2luc3QpLCAnXycsIHN0cl90b19sb3dlcih2YXJfZGVwdCksICcucmRzJykpCiMgbWF0X2JpYiA8LSByZWFkUkRTKHBhc3RlMCgnLi4vdGVtcDdtYXRfYmliX18nLCBzdHJfdG9fbG93ZXIodmFyX2luc3QpLCAnXycsIHN0cl90b19sb3dlcih2YXJfZGVwdCksICcucmRzJykpCmBgYAoKYGBge3J9CmdfYmliIDwtIG1hdF9iaWIgJT4lIGlncmFwaDo6Z3JhcGhfZnJvbV9hZGphY2VuY3lfbWF0cml4KG1vZGUgPSAidW5kaXJlY3RlZCIsIHdlaWdodGVkID0gVFJVRSwgZGlhZyA9IEZBTFNFKSAlPiUgCiAgaWdyYXBoOjpzaW1wbGlmeSgpICU+JQogIGFzX3RibF9ncmFwaChkaXJlY3RlZCA9IEZBTFNFKSAlTj4lIAogIGxlZnRfam9pbihNICU+JSBzZWxlY3QoWFgsIFBZLCBDUl9uLCBUQ195ZWFyLCBpbnRfZGVwdCksIGJ5ID0gYygibmFtZSIgPSAiWFgiKSkKYGBgCgojIyBSZXN0cmljdCB0aGUgbmV0d29yawoKYGBge3J9CiMgSW5pdGlhbCBGaWx0ZXIKY3V0b2ZfZWRnZV9iaWIgPC0gMgpjdXRvZl9ub2RlX2JpYiA8LSA1CgpjdXRvZl9lZGdlX3BjdF9iaWIgPC0gMC4wNQpjdXRvZl9ub2RlX3BjdF9iaWIgPC0gMC4yNQpgYGAKCmBgYHtyfQpnX2JpYiA8LSBnX2JpYiAlRT4lIAogIGZpbHRlcih3ZWlnaHQgPj0gY3V0b2ZfZWRnZV9iaWIpCgpnX2JpYiA8LSBnX2JpYiAlTj4lCiAgZmlsdGVyKCFub2RlX2lzX2lzb2xhdGVkKCkgIHwgaW50X2RlcHQgPT0gVFJVRSkgJU4+JQogIG11dGF0ZShkZ3IgPSBjZW50cmFsaXR5X2RlZ3JlZSh3ZWlnaHRzID0gd2VpZ2h0KSkgJU4+JSAKICBmaWx0ZXIoZGdyID49IGN1dG9mX25vZGVfYmliIHwgaW50X2RlcHQgPT0gVFJVRSkKYGBgCgpgYGB7cn0KIyBKYWNjYXJkIHdlaWdodGluZwpnX2JpYiA8LSBnX2JpYiAlRT4lIAogIG11dGF0ZSh3ZWlnaHRfamFjID0gd2VpZ2h0IC8gKC5OKCkkQ1Jfbltmcm9tXSArIC5OKCkkQ1Jfblt0b10gLSB3ZWlnaHQpICkgJUU+JQogIG11dGF0ZSh3ZWlnaHRfamFjID0gaWZfZWxzZSh3ZWlnaHRfamFjID4gMSwgMSwgd2VpZ2h0X2phYykgKSAlTj4lCiAgbXV0YXRlKGRncl9qYWMgPSBjZW50cmFsaXR5X2RlZ3JlZSh3ZWlnaHRzID0gd2VpZ2h0X2phYykpIApgYGAKCmBgYHtyfQojIEZ1cnRoZXIgcmVzdHJpY3Rpb25zCmdfYmliIDwtIGdfYmliICAlTj4lCiAgZmlsdGVyKHBlcmNlbnRfcmFuayhkZ3JfamFjKSA+PSBjdXRvZl9ub2RlX3BjdF9iaWIgfCBpbnRfZGVwdCA9PSBUUlVFKSAlRT4lIAogIGZpbHRlcihwZXJjZW50X3Jhbmsod2VpZ2h0X2phYykgPj0gY3V0b2ZfZWRnZV9wY3RfYmliKSAlTj4lCiAgZmlsdGVyKCFub2RlX2lzX2lzb2xhdGVkKCkgfCBpbnRfZGVwdCA9PSBUUlVFKQpgYGAKCiMjIENvbW11bml0eSBEZXRlY3Rpb24KCmBgYHtyfQpnX2JpYiA8LSBnX2JpYiAlTj4lCiAgbXV0YXRlKGNvbSA9IGdyb3VwX2xvdXZhaW4od2VpZ2h0cyA9IHdlaWdodF9qYWMpKSAlPiUKICBtb3JwaCh0b19zcGxpdCwgY29tKSAlPiUgCiAgbXV0YXRlKGRncl9pbnQgPSBjZW50cmFsaXR5X2RlZ3JlZSh3ZWlnaHRzID0gd2VpZ2h0X2phYykpICVOPiUKICB1bm1vcnBoKCkKYGBgCgpgYGB7cn0KZ19iaWIgJU4+JSBhc190aWJibGUoKSAlPiUgY291bnQoY29tLCBzb3J0ID0gVFJVRSkKYGBgCgpgYGB7cn0KIyBjb21tdW5pdHkgZGV0ZWN0aW9uCmNvbV9zaXplX2JpYiA8LSAxMDAKYGBgCgpgYGB7cn0KIyBDb21tdW5pdHkgc2l6ZSByZXN0cmljdGlvbgpnX2JpYiA8LSBnX2JpYiAlTj4lCiAgYWRkX2NvdW50KGNvbSwgbmFtZSA9ICdjb21fbicpICU+JQogIG11dGF0ZShjb20gPSBpZmVsc2UoY29tX24gPj0gY29tX3NpemVfYmliLCBjb20sIE5BKSApICU+JQogIHNlbGVjdCgtY29tX24pICAKCiMgRGVsZXRlIG5vZGVzIHdpdGhvdSBjb21tdW5pdHkKZ19iaWIgPC0gZ19iaWIgJU4+JQogIGZpbHRlcighaXMubmEoY29tKSB8IGludF9kZXB0ID09IFRSVUUpCmBgYAoKYGBge3J9CiMgVXBkYXRlIGRlZ3JlZQpnX2JpYiA8LSBnX2JpYiAlTj4lCiAgbXV0YXRlKGRnciA9IGNlbnRyYWxpdHlfZGVncmVlKHdlaWdodHMgPSB3ZWlnaHQpLAogICAgICAgICBkZ3JfamFjID0gY2VudHJhbGl0eV9kZWdyZWUod2VpZ2h0cyA9IHdlaWdodF9qYWMpKQpgYGAKCmBgYHtyfQojIFNhdmUgdGhlIG9iamVjdHMgd2UgbmVlZCBsYXRlcm9uCmdfYmliICU+JSBzYXZlUkRTKHBhc3RlMCgnLi4vdGVtcC9nX2JpYl8nLCBzdHJfdG9fbG93ZXIodmFyX2luc3QpLCAnXycsIHN0cl90b19sb3dlcih2YXJfZGVwdCksICcucmRzJykpCmBgYAoKIyMgTWVyZ2Ugd2l0aCBtYWluIGRhdGEKCmBgYHtyfQpNX2JpYiA8LSBNICU+JSBzZWxlY3QoWFgpICU+JSBpbm5lcl9qb2luKGdfYmliICVOPiUgYXNfdGliYmxlKCkgJT4lIHNlbGVjdChuYW1lLCBkZ3IsIGRncl9qYWMsIGNvbSwgZGdyX2ludCksIGJ5ID0gYygnWFgnID0gJ25hbWUnKSkgJT4lCiAgZGlzdGluY3QoWFgsIC5rZWVwX2FsbCA9IFRSVUUpIAoKTV9iaWIgJT4lIHNhdmVSRFMocGFzdGUwKCcuLi90ZW1wL01fYmliXycsIHN0cl90b19sb3dlcih2YXJfaW5zdCksICdfJywgc3RyX3RvX2xvd2VyKHZhcl9kZXB0KSwgJy5yZHMnKSkKYGBgCgojIyBBZ2dyZWdhdGVkIE5ldHdvcmsKCmBgYHtyfQpyZXF1aXJlKFJOZXdzZmxvdykKZ19iaWJfYWdnIDwtIGdfYmliICVOPiUKICBmaWx0ZXIoIWlzLm5hKGNvbSkpICU+JQogIG5ldHdvcmtfYWdncmVnYXRlKGJ5ID0gImNvbSIsIGVkZ2VfYXR0cmlidXRlID0gIndlaWdodF9qYWMiLCBhZ2dfRlVOID0gc3VtKSAgJT4lCiAgYXMudW5kaXJlY3RlZChtb2RlID0gImNvbGxhcHNlIiwgZWRnZS5hdHRyLmNvbWIgPSAic3VtIikgJT4lCiAgYXNfdGJsX2dyYXBoKGRpcmVjdGVkID0gRkFMU0UpICVOPiUKICBzZWxlY3QoLW5hbWUpICU+JQogIG11dGF0ZShpZCA9IDE6bigpKSAlRT4lCiAgcmVuYW1lKHdlaWdodCA9IGFnZy53ZWlnaHRfamFjKSAlPiUKICBzZWxlY3QoZnJvbSwgdG8sIHdlaWdodCkKYGBgCgpgYGB7cn0KIyMgV2VpZ2h0IGVkZ2VzCiMgZ19iaWJfYWdnIDwtIGdfYmliX2FnZyAlRT4lCiMgICByZW5hbWUod2VpZ2h0X2NvdW50ID0gd2VpZ2h0KSAlPiUKIyAgIG11dGF0ZSh3ZWlnaHQgPSB3ZWlnaHRfY291bnQgLyAoLk4oKSROW2Zyb21dICogLk4oKSROW3RvXSkgKSAlPiUKIyAgIG11dGF0ZSh3ZWlnaHQgPSAod2VpZ2h0ICogMTAwKSAlPiUgcm91bmQoNCkpICVOPiUKIyAgIG11dGF0ZShkZ3IgPSBjZW50cmFsaXR5X2RlZ3JlZSh3ZWlnaHRzID0gd2VpZ2h0KSkKYGBgCgpgYGB7cn0KIyBTYXZlIHRoZSBvYmplY3RzIHdlIG5lZWQgbGF0ZXJvbgpnX2JpYl9hZ2cgJT4lIHNhdmVSRFMocGFzdGUwKCcuLi90ZW1wL2dfYmliX2FnZ18nLCBzdHJfdG9fbG93ZXIodmFyX2luc3QpLCAnXycsIHN0cl90b19sb3dlcih2YXJfZGVwdCksICcucmRzJykpCmBgYAoKYGBge3J9CiMgRGVsZXRlIGFsbCB3ZSBkb250IG5lZWQKcm0obWF0X2JpYiwgZ19iaWIsIGNvbV9zaXplX2JpYiwgY3V0b2ZfZWRnZV9iaWIsIGN1dG9mX25vZGVfYmliLCBnX2JpYl9hZ2cpCmBgYAoKCiMgTmV0d29yayBDb2NpdGF0aW9uIAoKYGBge3J9Cm1hdF9jaXQgPC0gTSAlPiUKICBzZW1pX2pvaW4oTV9iaWIsIGJ5ID0gJ1hYJykgJT4lCiAgYXMuZGF0YS5mcmFtZSgpICU+JSAKICBiaWJsaW9OZXR3b3JrKGFuYWx5c2lzID0gImNvLWNpdGF0aW9uIiwgbmV0d29yayA9ICJyZWZlcmVuY2VzIiwgc2VwID0gIjsiLCBzaG9ydGxhYmVsID0gRkFMU0UpCmBgYAoKYGBge3J9Cm1hdF9jaXQgJT4lIHNhdmVSRFMocGFzdGUwKCcuLi90ZW1wL21hdF9jaXRfJywgc3RyX3RvX2xvd2VyKHZhcl9pbnN0KSwgJ18nLCBzdHJfdG9fbG93ZXIodmFyX2RlcHQpLCAnLnJkcycpKQojIG1hdF9jaXQgPC0gcmVhZFJEUyhwYXN0ZTAoJy4uL3RlbXAvbWF0X2NpdF8nLCBzdHJfdG9fbG93ZXIodmFyX2luc3QpLCAnXycsIHN0cl90b19sb3dlcih2YXJfZGVwdCksICcucmRzJykpCmBgYAoKYGBge3J9CmdfY2l0IDwtIG1hdF9jaXQgJT4lIGlncmFwaDo6Z3JhcGhfZnJvbV9hZGphY2VuY3lfbWF0cml4KG1vZGUgPSAidW5kaXJlY3RlZCIsIHdlaWdodGVkID0gVFJVRSwgZGlhZyA9IEZBTFNFKSAlPiUgCiAgaWdyYXBoOjpzaW1wbGlmeSgpICU+JQogIGFzX3RibF9ncmFwaChkaXJlY3RlZCA9IEZBTFNFKSAjICVOPiUgbGVmdF9qb2luKE0gJT4lIHNlbGVjdChYWCwgU1IsIFBZLCBUQywgSjkpLCBieSA9IGMoIm5hbWUiID0gIlhYIikpICU+JSBtdXRhdGUoaWQgPSAxOm4oKSkgCmBgYAoKYGBge3J9CiMgSW5pdGlhbCBGaWx0ZXIKY3V0b2ZfZWRnZV9jaXQgPC0gMgpjdXRvZl9ub2RlX2NpdCA8LSA1CgpjdXRvZl9lZGdlX3BjdF9jaXQgPC0gMC4yNQpjdXRvZl9ub2RlX3BjdF9jaXQgPC0gMC4yNQpgYGAKCmBgYHtyfQojIFJlc3RyaWN0IHRoZSBuZXR3b3JrCmdfY2l0IDwtIGdfY2l0ICVFPiUgCiAgZmlsdGVyKHdlaWdodCA+PSBjdXRvZl9lZGdlX2NpdCkgJU4+JQogIGZpbHRlcighbm9kZV9pc19pc29sYXRlZCgpKQoKZ19jaXQgPC0gZ19jaXQgJU4+JQogIG11dGF0ZShkZ3IgPSBjZW50cmFsaXR5X2RlZ3JlZSh3ZWlnaHRzID0gd2VpZ2h0KSkgJU4+JQogIGZpbHRlcihkZ3IgPj0gY3V0b2Zfbm9kZV9jaXQpIApgYGAKCmBgYHtyfQojIEZ1cnRoZXIgcmVzdHJpY3Rpb25zCmdfY2l0IDwtIGdfY2l0ICVOPiUgCiAgZmlsdGVyKHBlcmNlbnRfcmFuayhkZ3IpID49IGN1dG9mX25vZGVfcGN0X2NpdCkgJUU+JQogIGZpbHRlcihwZXJjZW50X3Jhbmsod2VpZ2h0KSA+PSBjdXRvZl9lZGdlX3BjdF9jaXQpICVOPiUKICBmaWx0ZXIoIW5vZGVfaXNfaXNvbGF0ZWQoKSkKYGBgCgojIyBDb21tdW5pdHkgRGV0ZWN0aW9uCgpgYGB7cn0KZ19jaXQgPC0gZ19jaXQgJU4+JQogIG11dGF0ZShjb20gPSBncm91cF9sb3V2YWluKHdlaWdodHMgPSB3ZWlnaHQpKSAlTj4lCiAgbW9ycGgodG9fc3BsaXQsIGNvbSkgJT4lIAogIG11dGF0ZShkZ3JfaW50ID0gY2VudHJhbGl0eV9kZWdyZWUod2VpZ2h0cyA9IHdlaWdodCkpICU+JQogIHVubW9ycGgoKQpgYGAKCmBgYHtyfQpnX2NpdCAlTj4lIGFzX3RpYmJsZSgpICU+JSBjb3VudChjb20pCmBgYAoKYGBge3J9CiMgY29tbXVuaXR5IGRldGVjdGlvbgpjb21fc2l6ZV9jaXQgPC0gMjUwCmBgYAoKCmBgYHtyfQojIENvbW11bml0eSBzaXplIHJlc3RyaWN0aW9uCmdfY2l0IDwtIGdfY2l0ICVOPiUKICBhZGRfY291bnQoY29tLCBuYW1lID0gJ2NvbV9uJykgJT4lCiAgbXV0YXRlKGNvbSA9IGlmZWxzZShjb21fbiA+PSBjb21fc2l6ZV9jaXQsIGNvbSwgTkEpICkgJT4lCiAgc2VsZWN0KC1jb21fbikgIAoKIyBEZWxldGUgbm9kZXMgd2l0aG91IGNvbW11bml0eQpnX2NpdCA8LSBnX2NpdCAlTj4lCiAgZmlsdGVyKCFpcy5uYShjb20pKQoKIyBVcGRhdGUgZGVncmVlCmdfY2l0IDwtIGdfY2l0ICVOPiUKICBtdXRhdGUoZGdyID0gY2VudHJhbGl0eV9kZWdyZWUod2VpZ2h0cyA9IHdlaWdodCkpCmBgYAoKYGBge3J9CiMgU2F2ZSB0aGUgb2JqZWN0cyB3ZSBuZWVkIGxhdGVyb24KZ19jaXQgJT4lIHNhdmVSRFMocGFzdGUwKCcuLi90ZW1wL2dfY2l0XycsIHN0cl90b19sb3dlcih2YXJfaW5zdCksICdfJywgc3RyX3RvX2xvd2VyKHZhcl9kZXB0KSwgJy5yZHMnKSkKYGBgCgpgYGB7cn0KIyBnZW5lcmF0ZSBjaXRhdGlvbiByZXBvcnQKQ19udyA8LSBnX2NpdCAlTj4lIGFzX3RpYmJsZSgpIApDX253ICU+JSAgc2F2ZVJEUyhwYXN0ZTAoJy4uL3RlbXAvQ19ud18nLCBzdHJfdG9fbG93ZXIodmFyX2luc3QpLCAnXycsIHN0cl90b19sb3dlcih2YXJfZGVwdCksICcucmRzJykpCmBgYAoKIyMgQSBnZ3JlZ2F0ZWQgTmV0d29yawoKYGBge3J9CnJlcXVpcmUoUk5ld3NmbG93KQpnX2NpdF9hZ2cgPC0gZ19jaXQgJT4lCiAgbmV0d29ya19hZ2dyZWdhdGUoYnkgPSAiY29tIiwgZWRnZV9hdHRyaWJ1dGUgPSAid2VpZ2h0IiwgYWdnX0ZVTiA9IHN1bSkgICU+JQogIGFzLnVuZGlyZWN0ZWQobW9kZSA9ICJjb2xsYXBzZSIsIGVkZ2UuYXR0ci5jb21iID0gInN1bSIpICU+JQogIGFzX3RibF9ncmFwaChkaXJlY3RlZCA9IEZBTFNFKSAlTj4lCiAgc2VsZWN0KC1uYW1lKSAlPiUKICBtdXRhdGUoaWQgPSAxOm4oKSkgJUU+JQogIHJlbmFtZSh3ZWlnaHQgPSBhZ2cud2VpZ2h0KSAlPiUKICBzZWxlY3QoZnJvbSwgdG8sIHdlaWdodCkKYGBgCgpgYGB7cn0KZ19jaXRfYWdnICU+JSBzYXZlUkRTKHBhc3RlMCgnLi4vdGVtcC9nX2NpdF9hZ2dfJywgc3RyX3RvX2xvd2VyKHZhcl9pbnN0KSwgJ18nLCBzdHJfdG9fbG93ZXIodmFyX2RlcHQpLCAnLnJkcycpKQpgYGAKCmBgYHtyfQpybShtYXRfY2l0LCBnX2NpdCwgZ19jaXRfYWdnKQpgYGAKCgojIDIgbW9kZSBuZXR3b3JrIAoKCmBgYHtyfQpyb3duYW1lcyhNKSA8LSBNICU+JSBwdWxsKFhYKQoKbV8ybSA8LSBNICU+JSAKICBzZW1pX2pvaW4oTV9iaWIpICU+JQogIGFzLmRhdGEuZnJhbWUoKSAlPiUgY29jTWF0cml4KEZpZWxkID0gIkNSIiwgc2VwID0gIjsiLCBzaG9ydCA9IEZBTFNFKQpgYGAKCmBgYHtyfQpnXzJtIDwtIG1fMm0gJT4lIGlncmFwaDo6Z3JhcGhfZnJvbV9pbmNpZGVuY2VfbWF0cml4KGRpcmVjdGVkID0gVFJVRSwgbW9kZSA9ICdvdXQnLCBtdWx0aXBsZSA9IEZBTFNFKSAlPiUgCiAgaWdyYXBoOjpzaW1wbGlmeSgpIApgYGAKCmBgYHtyfQplbF8ybSA8LSBnXzJtICU+JQogIGdldC5lZGdlbGlzdCgpICU+JQogIGFzX3RpYmJsZSgpICU+JQogIHJlbmFtZShmcm9tID0gVjEsCiAgICAgICAgIHRvID0gVjIpCmBgYAoKYGBge3J9CmVsXzJtICU8PiUKICBsZWZ0X2pvaW4oTV9iaWIgJT4lIHNlbGVjdChYWCwgY29tKSwgYnkgPSBjKCdmcm9tJyA9ICdYWCcpKSAlPiUKICByZW5hbWUoY29tX2JpYiA9IGNvbSkgJT4lCiAgbGVmdF9qb2luKE0gJT4lIHNlbGVjdChYWCwgUFkpLCBieSA9IGMoJ2Zyb20nID0gJ1hYJykpICU+JQogIGxlZnRfam9pbihDX253ICU+JSBzZWxlY3QobmFtZSwgY29tKSwgYnkgPSBjKCd0bycgPSAnbmFtZScpKSAlPiUKICByZW5hbWUoY29tX2NpdCA9IGNvbSkgJT4lIAogIGRyb3BfbmEoUFksIGNvbV9iaWIsIGNvbV9jaXQpCmBgYAoKYGBge3J9CiMgc2F2ZQplbF8ybSAlPiUgc2F2ZVJEUyhwYXN0ZTAoJy4uL3RlbXAvZWxfMm1fJywgc3RyX3RvX2xvd2VyKHZhcl9pbnN0KSwgJ18nLCBzdHJfdG9fbG93ZXIodmFyX2RlcHQpLCAnLnJkcycpKQpgYGAKCmBgYHtyfQpybShtXzJtLCBnXzJtLCBlbF8ybSwgQ19udykKYGBgCgoKIyBUb3BpY21vZGVsCgpgYGB7cn0KbGlicmFyeSh0aWR5dGV4dCkKbGlicmFyeSh0b3BpY21vZGVscykKbGlicmFyeSh0ZXh0c3RlbSkKYGBgCgpgYGB7cn0KIyBFeHRyYWN0IHRleHQgdG8gd29yayB3aXRoCnRleHRfdGlkeSA8LSBNICU+JSAKICBhc190aWJibGUoKSAlPiUKICBzZWxlY3QoWFgsIEFCKSAlPiUKICByZW5hbWUoZG9jdW1lbnQgPSBYWCwKICAgICAgICAgdGV4dCA9IEFCKSAKYGBgCgpgYGB7cn0KIyBTb21lIGluaXRpYWwgY2xlYW5pbmcKdGV4dF90aWR5ICU8PiUgCiAgbXV0YXRlKHRleHQgPSB0ZXh0ICU+JSAKICAgICAgICAgICBzdHJfdG9fbG93ZXIoKSAlPiUKICAgICAgICAgICBzdHJfcmVwbGFjZV9hbGwoIiYiLCAiLWFuZC0iKSAlPiUKICAgICAgICAgICBzdHJfcmVtb3ZlX2FsbCgiLygmdHJhZGU7fCZyZWc7fCZjb3B5O3wmIzg0ODI7fCYjMTc0O3wmIzE2OTspLy4qIikgJT4lCiAgICAgICAgICAgaWNvbnYodG8gPSAiVVRGLTgiLCBzdWIgPSAiYnl0ZSIpICU+JQogICAgICAgICAgIHN0cl9yZW1vdmVfYWxsKCLvv70uKiIpICU+JQogICAgICAgICAgIHN0cl9yZW1vdmVfYWxsKCdbOmRpZ2l0Ol0nKSAlPiUKICAgICAgICAgICBzdHJfc3F1aXNoKCkgCiAgKSAgJT4lCiAgZHJvcF9uYSgpIApgYGAKCmBgYHtyfQojIG4gZ3JhbXMKdGV4dF90aWR5ICU8PiUgCiAgdW5uZXN0X25ncmFtcyh0ZXJtLCB0ZXh0LCBuZ3JhbV9kZWxpbSA9ICcgJywgbl9taW4gPSAxLCBuID0gMykgJT4lIAogIHNlcGFyYXRlKHRlcm0sIGMoIndvcmQxIiwgIndvcmQyIiwgIndvcmQzIiksIHNlcCA9ICIgIikKYGBgCgpgYGB7cn0KIyBTdG9wd29yZHMKc3RvcF93b3Jkc19vd24gPC0gdGliYmxlKAogIHdvcmQgPWMoInRoZSIsICJyaWdodHMiLCJyZXNlcnZlZCIgLCAic3R1ZHkiLCAic3R1ZGllcyIsICJ0aGVzZSIsICJ0aGlzIiwgInBhcGVyIiwgInJlc3VsdCIsICJtb2RlbCIsICJhcHByb2FjaCIsICJhcnRpY2xlIiwgImF1dGhvciIsICJtZXRob2QiLCAidW5kZXJzdGFuZCIsICJmb2N1cyIsICJleGFtaW5lIiwgImFpbSIsICJhcmd1ZSIsICJpZGVudGlmeSIsICJpbmNyZWFzZSIsICJkYXR1bSIsICJwb3RlbnRpYWwiLCAiZXhwbG9yZSIsICJpbmNsdWRlIiwgImlzc3VlIiwgInByb3Bvc2UiLCAiYWRkcmVzcyIsICJhcHBseSIsICJyZXF1aXJlIiwgImFuYWx5c2UiLCAicmVsYXRlIiwgImZpbmRpbmciLCAiYW5hbHl6ZSIsICJkaXNjdXNzIiwgImNvbnRyaWJ1dGUiLCAicHVibGlzaCIsICJpbnZvbHZlIiwgImRyYXciLCAibGVhZCIsICJleGlzdCIsICJzZXQiLCAicmVkdWNlIiwgImNyZWF0ZSIsICJmb3JtIiwgImV4cGxhaW4iLCAicGxheSIsICAiYWZmZWN0IiwgInJlZ2FyZCIsICJhc3NvY2lhdGUiLCAiZXN0YWJsaXNoIiwgImZvbGxvdyIsICJjb25jbHVkZSIsICJkZWZpbmUiLCAic3Ryb25nIiwgImF0dGVtcHQiLCAiZmluYWxseSIsICJlbHNldmllciIsICJvZmZlciIsICAidGF5bG9yIiwgImZyYW5jaXMiLCAiY29weXJpZ2h0IiwgInNwcmluZ2VyIiwgIndpbGV5IiwgImVtZXJhbGQiLCAiY29weXJpZ2h0IiwgImIudiIpLAogIGxleGljb24gPSAnb3duJykgJT4lIAogIGJpbmRfcm93cyhzdG9wX3dvcmRzKQoKIyBMZW1tYXRpemluZyAKbGVtbWFfb3duIDwtIHRpYmJsZSggIyBXT1JLIElOIFRIQVQgISEhISEhISEhIQogIHRva2VuID0gYygic3lzdGVtcyIsICJpbnN0aXR1dGlvbmFsIiwgInRlY2hub2xvZ2ljYWwiLCAibmF0aW9uYWwiLCAicmVnaW9uYWwiLCAic3VzdGFpbmFibGUiLCAgICAiZW52aXJvbm1lbnRhbCIsICJwb2xpdGljYWwiLCAicG9saXRpYyIsICJwb2xpdGljcyIpLAogIGxlbW1hID0gYygic3lzdGVtIiwgImluc3RpdHV0aW9uIiwgICAidGVjaG5vbG9neSIsICAgICJuYXRpb24iLCAgICJyZWdpb24iLCAgICJzdXN0YWluYWJpbGl0eSIsICJlbnZpcm9ubWVudCIsICJwb2xpY3kiLCAicG9saWN5IiwgInBvbGljeSIpKQpgYGAKCmBgYHtyfQp0ZXh0X3RpZHkgJTw+JQogIGZpbHRlcighd29yZDEgJWluJSBzdG9wX3dvcmRzX293biR3b3JkLAogICAgICAgICAhd29yZDIgJWluJSBzdG9wX3dvcmRzX293biR3b3JkLAogICAgICAgICAhd29yZDMgJWluJSBzdG9wX3dvcmRzX293biR3b3JkLAogICAgICAgICBpcy5uYSh3b3JkMSkgfCBzdHJfbGVuZ3RoKHdvcmQxKSA+IDIsCiAgICAgICAgIGlzLm5hKHdvcmQyKSB8IHN0cl9sZW5ndGgod29yZDIpID4gMiwKICAgICAgICAgaXMubmEod29yZDMpIHwgc3RyX2xlbmd0aCh3b3JkMykgPiAyKQpgYGAKCmBgYHtyfQpsZW1tYV9uZXcgPC0gbGV4aWNvbjo6aGFzaF9sZW1tYXMgJT4lIAogIGZpbHRlcih0b2tlbiAhPSAnZGF0YScpICU+JQogIGFudGlfam9pbihsZW1tYV9vd24sIGJ5ID0gJ3Rva2VuJykgJT4lCiAgYmluZF9yb3dzKGxlbW1hX293bikKYGBgCgpgYGB7cn0KdGV4dF90aWR5ICU8PiUKICBtdXRhdGUod29yZDEgPSB3b3JkMSAlPiUgbGVtbWF0aXplX3dvcmRzKGRpY3Rpb25hcnkgPSBsZW1tYV9uZXcpLAogICAgICAgICB3b3JkMiA9IHdvcmQyICU+JSBsZW1tYXRpemVfd29yZHMoZGljdGlvbmFyeSA9IGxlbW1hX25ldyksCiAgICAgICAgIHdvcmQzID0gd29yZDMgJT4lIGxlbW1hdGl6ZV93b3JkcyhkaWN0aW9uYXJ5ID0gbGVtbWFfbmV3KSkKYGBgCgpgYGB7cn0Kcm0oc3RvcF93b3Jkc19vd24sIGxlbW1hX293biwgbGVtbWFfbmV3KQpgYGAKCgpgYGB7cn0KIyBVbml0ZSBhbGwgYWdhaW4KdGV4dF90aWR5ICU8PiUKICB1bml0ZSh0ZXJtLCB3b3JkMSwgd29yZDIsIHdvcmQzLCBuYS5ybSA9IFRSVUUsIHNlcCA9ICIgIikKYGBgCgpgYGB7cn0KIyBURklERiB3ZWlnaHRpbmcKdGV4dF90aWR5ICU8PiUKICBjb3VudChkb2N1bWVudCwgdGVybSkgJT4lCiAgYmluZF90Zl9pZGYodGVybSwgZG9jdW1lbnQsIG4pCmBgYAoKYGBge3J9CiMgVFRNCnRleHRfZHRtIDwtIHRleHRfdGlkeSAlPiUKICBjYXN0X2R0bShkb2N1bWVudCwgdGVybSwgbikgJT4lIHRtOjpyZW1vdmVTcGFyc2VUZXJtcyhzcGFyc2UgPSAuOTkpCmBgYAoKYGBge3J9CiMgRmluZGluZyBudW1tZXIgb2YgdG9waWNzCmxpYnJhcnkoImxkYXR1bmluZyIpCgpmaW5kX3RvcGljcyA8LSB0ZXh0X2R0bSAlPiUKICBGaW5kVG9waWNzTnVtYmVyKAogICAgdG9waWNzID0gc2VxKGZyb20gPSA0LCB0byA9IDE1LCBieSA9IDEpLAogICAgbWV0cmljcyA9IGMoIkdyaWZmaXRoczIwMDQiLCAiQ2FvSnVhbjIwMDkiLCAiQXJ1bjIwMTAiLCAiRGV2ZWF1ZDIwMTQiKSwKICAgIG1ldGhvZCA9ICJHaWJicyIsCiAgICBjb250cm9sID0gbGlzdChzZWVkID0gMTMzNyksCiAgICBtYy5jb3JlcyA9IDRMLAogICAgdmVyYm9zZSA9IFRSVUUKKQoKZmluZF90b3BpY3MgJT4lIEZpbmRUb3BpY3NOdW1iZXJfcGxvdCgpIAojIExJU0VSIFVEOiBUYWtpbmcgOCBvciAxMSB0b3BpY3MKYGBgCgpgYGB7cn0KIyBMREEKbl90b3BpYyA9IDExCgp0ZXh0X2xkYSA8LSB0ZXh0X2R0bSAlPiUgTERBKGsgPSBuX3RvcGljLCBtZXRob2Q9ICJHaWJicyIsIGNvbnRyb2wgPSBsaXN0KHNlZWQgPSAxMzM3KSkKYGBgCgpgYGB7cn0KIyMjIExEQSBWaXoKbGlicmFyeShMREF2aXMpCmpzb25fbGRhIDwtIHRvcGljbW9kZWxzX2pzb25fbGRhdmlzKGZpdHRlZCA9IHRleHRfbGRhLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jX2R0bSA9IHRleHRfZHRtLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kID0gIlRTTkUiKQpqc29uX2xkYSAlPiUgc2VyVmlzKCkKYGBgCgpgYGB7cn0KIyBTYXZlCnRleHRfdGlkeSAlPiUgc2F2ZVJEUyhwYXN0ZTAoJy4uL3RlbXAvdGV4dF90aWR5XycsIHN0cl90b19sb3dlcih2YXJfaW5zdCksICdfJywgc3RyX3RvX2xvd2VyKHZhcl9kZXB0KSwgJy5yZHMnKSkKdGV4dF9sZGEgJT4lIHNhdmVSRFMocGFzdGUwKCcuLi90ZW1wL3RleHRfbGRhXycsIHN0cl90b19sb3dlcih2YXJfaW5zdCksICdfJywgc3RyX3RvX2xvd2VyKHZhcl9kZXB0KSwgJy5yZHMnKSkKanNvbl9sZGEgJT4lIHNlclZpcyhvdXQuZGlyID0gcGFzdGUwKCdvdXRwdXQvTERBdml6XycsIHN0cl90b19sb3dlcih2YXJfaW5zdCksICdfJywgc3RyX3RvX2xvd2VyKHZhcl9kZXB0KSwgJy5yZHMnKSkKYGBgCgpgYGB7cn0KIyBjbGVhbiB1cApybSh0ZXh0X3RpZHksIHRleHRfZHRtLCB0ZXh0X2xkYSwganNvbl9sZGEpCmBgYAoKIyBMb2NhbCBjaXRhdGlvbnMKCmBgYHtyfQpDUiA8LSBNICU+JSBjaXRhdGlvbnMoc2VwID0gIjsiKQpgYGAKCmBgYHtyfQpDUiAlPiUgc2F2ZVJEUyhwYXN0ZTAoJy4uL3RlbXAvQ1JfJywgc3RyX3RvX2xvd2VyKHZhcl9pbnN0KSwgJ18nLCBzdHJfdG9fbG93ZXIodmFyX2RlcHQpLCAnLnJkcycpKQpgYGAKCgoKYGBge3J9CiNDUkwgPC0gTSAlPiUgbG9jYWxDaXRhdGlvbnMoc2VwID0gIjsiKSAjIEZvciBzb21lIHJlYXNvbiB0YWtlcyBmb3JldmVyLi4uCiNDUkwgJT4lIHNhdmVSRFMocGFzdGUwKCcuLi90ZW1wL0NSTF8nLCBzdHJfdG9fbG93ZXIodmFyX2luc3QpLCAnXycsIHN0cl90b19sb3dlcih2YXJfZGVwdCksICcucmRzJykpCmBgYAoKYGBge3J9CnJtKENSLCBDUkwpCmBgYAoKCiMgSGlzdG9yaWNhbCBjaXRhdGlvbgoKYGBge3J9CiMgQ3JlYXRlIGEgaGlzdG9yaWNhbCBjaXRhdGlvbiBuZXR3b3JrCmhpc3RSZXN1bHRzIDwtIE0gJT4lIGhpc3ROZXR3b3JrKHNlcCA9ICI7IikKYGBgCgpgYGB7cn0KaGlzdFJlc3VsdHMgJT4lIGhpc3RQbG90KG4gPSA1MCwgc2l6ZSA9IDEwLCBsYWJlbHNpemUgPSA1KQpgYGAKCmBgYHtyfQpoaXN0UmVzdWx0cyAlPiUgc2F2ZVJEUyhwYXN0ZTAoJy4uL3RlbXAvaGlzdFJlc3VsdF8nLCBzdHJfdG9fbG93ZXIodmFyX2luc3QpLCAnXycsIHN0cl90b19sb3dlcih2YXJfZGVwdCksICcucmRzJykpCmBgYAoKYGBge3J9CnJtKGhpc3RSZXN1bHRzKQpgYGAKCiMgT3RoZXIgc3R1ZmYKCiMjIFRocmVlZmllbGQgUGxvdAoKYGBge3J9Ck1fdGhyZWVmaWVsZCA8LSBNICU+JSBhcy5kYXRhLmZyYW1lKCkgJT4lIHRocmVlRmllbGRzUGxvdChmaWVsZHMgPSBjKCJBVSIsICJERSIsICJDUl9TTyIpLCBuID0gYygyMCwgMjAsIDEwKSkKTV90aHJlZWZpZWxkCmBgYAoKYGBge3J9Ck1fdGhyZWVmaWVsZCAlPiUgc2F2ZVJEUyhwYXN0ZTAoJy4uL3RlbXAvdGhyZWVmaWVsZF8nLCBzdHJfdG9fbG93ZXIodmFyX2luc3QpLCAnXycsIHN0cl90b19sb3dlcih2YXJfZGVwdCksICcucmRzJykpCgpgYGAKCgoKcm0oTV90aHJlZWZpZWxkKQoKI00gJT4lIGF1dGhvclByb2RPdmVyVGltZShrID0gMTAsIGdyYXBoID0gVFJVRSkKI00gJT4lIHJweXMoc2VwID0gIjsiLCBncmFwaCA9IFQpCiNNICU+JSB0aGVtYXRpY01hcCgpCiNNX3RoZW1fZXZvIDwtIE0gJT4lIHRoZW1hdGljRXZvbHV0aW9uKHllYXJzID0gYygyMDE2LCAyMDE4LDIwMjEpKQoKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgQ29uY2VwdHVhbCBTdHJ1Y3R1cmUKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKI0NTIDwtIE0gJT4lIGNvbmNlcHR1YWxTdHJ1Y3R1cmUoZmllbGQ9IklEIiwgbWV0aG9kPSJDQSIsIG1pbkRlZ3JlZT00LCBjbHVzdD01LCBzdGVtbWluZz1GQUxTRSwgbGFiZWxzaXplPTEwLCBkb2N1bWVudHM9MTApCiNDUyAlPiUgc2F2ZVJEUygiLi4vdGVtcC9DUy5SRFMiKQojcm0oQ1MpCgoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIE90aGVyIG5ldHdvcmsgbGV2ZWxzCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBtYXRfYmliICU8PiUgbm9ybWFsaXplU2ltaWxhcml0eSh0eXBlID0gImFzc29jaWF0aW9uIikgIyBOT1RFOiBXZSBkbyBub3Qgbm9ybWFsaXplIG9uIHRoZSBiaWJsaW8tbmV0d29yayBwdWJsaWNhdGlvbiBsZXZlbCBhbnltb3JlLgoK